#ifndef PARSER_H_
#define PARSER_H_

#include <fstream>
#include <istream>
#include <iostream>
#include <string>
#include "Tablero.h"
#include "Peon.h"
#include "Caballo.h"
#include "Torre.h"
#include "Alfil.h"
#include "Reina.h"
#include "Rey.h"
#include "Posicion.h"
#include "Color.h"

enum tEnroque {NO_ENROQUE, CORTO, LARGO};

#define MAX_COORD 8
#define PEON 'P'
#define CABALLO 'N'
#define TORRE 'R'
#define ALFIL 'B'
#define REINA 'Q'
#define REY 'K'

class Parser {
private:
	std::istream *archivo;
	bool leeDeStandard;
	static void armarFila(const std::string&, Tablero*, int);
	tEnroque esEnroque(const std::string&) const;
	bool debePromocionar(const std::string& turno) const;
	void procesarTurno(const std::string&, Tablero *, tColor, bool) const;
    bool esNumeroDeJugada(const std::string&) const;
    bool evaluarMovimientos(const std::string& turno) const;
    int numeroDeMovimiento(std::string& movimiento) const;
    tColor identificarColorInicial() const;
	friend std::istream& operator >>(std::istream &, Tablero &);

public:
	Parser();
	std::istream* getArchivo() const;
	void abrirArchivo(char* path);
	bool aperturaErronea() const;
	void leerTurnos(Tablero* tablero) const;
	void leerDeStandard();
	virtual ~Parser();
};
#endif /* PARSER_H_ */
